﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;


using Modelo_ETdA.Negocio.AmbienteComercial;
using Modelo_ETdA.Negocio.Analista;

namespace Modelo_ETdA.Interface
{
    public partial class RegistarAmbComercial : Form
    {
        public MenuAnalista menuAnalist;
        GestorAmbienteComercial gestorAmb;
        List<CategoriaAmbComercial> listaCategorias;
        int codigoAmbC;
        SortedDictionary<String, int> listaAnalistas;
        
        GestorAnalista gestorAna;

        public RegistarAmbComercial(MenuAnalista ant, GestorAmbienteComercial gestor, GestorAnalista gestorAn)
        {
            InitializeComponent();
            menuAnalist = ant;
            gestorAna = gestorAn;
            gestorAmb = gestor;
            listaCategorias = gestorAmb.getListCategorias();
            insereCategorias();
            insereAnalistas(gestorAna.getMapUsernamesCodAnalista());
        }


        public void insereCategorias()
        {
            foreach (CategoriaAmbComercial categoria in listaCategorias)
            {
                lcategorias.Items.Add(categoria.nome);
            }
        }

        public void insereAnalistas(SortedDictionary<String, int> listaAnalistasX)
        {
            listaAnalistas = listaAnalistasX;
            foreach (KeyValuePair<String, int> par in listaAnalistas)
            {
                if(par.Value != menuAnalist.Analist.cod) lanalistas.Items.Add(par.Value + " " + par.Key);
            }

        }
        public int procuraCodAnalista(String s)
        {
            foreach (KeyValuePair<String, int> par in listaAnalistas)
            {
                if (s.Equals(par.Value + " " + par.Key)) return par.Value;
            }
            return -1;
        }




        public CategoriaAmbComercial procuraCategoria(String nome)
        {
            int i = 0;
            bool continua = true;
            CategoriaAmbComercial res = null;

            while (i != listaCategorias.Count && continua)
            {
                if (nome.Equals(listaCategorias[i].nome))
                {
                    res = listaCategorias[i];
                    continua = false;
                }
                i++;
            }
            return res;
        }


        private void voltar_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            menuAnalist.Visible = true;
        }

        private void seguinte_Click(object sender, EventArgs e)
        {
            CategoriaAmbComercial categoria;
            try
            {
                if (nome.TextLength > 0 && morada.TextLength > 0 && email.TextLength > 0 && lcategorias.Text != "")
                {
                    AmbienteComercialCabecalho cabecalho = new AmbienteComercialCabecalho(codigoAmbC, nome.Text, morada.Text, email.Text);

                    categoria = procuraCategoria(lcategorias.Text);
                    if (categoria == null)
                    {
                        categoria = new CategoriaAmbComercial(-2, lcategorias.Text);
                        gestorAmb.adicionarCategoria(categoria);
                    }

                    List<int> analistasAmb = new List<int>();
                    for (int i = 0; i < lanalistas.CheckedItems.Count; i++)
                    {
                        analistasAmb.Add(procuraCodAnalista(lanalistas.CheckedItems[i].ToString()));
                    }

                    this.Visible = false;
                    Form next = new RegistarAmbComercial2(this, menuAnalist, cabecalho, categoria, analistasAmb, gestorAmb);
                    next.Visible = true;
                }
                else MessageBox.Show("Não preencheu todos os campos!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao registar ambiente comercial!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void RegistarAmbComercial_FormClosed(object sender, FormClosedEventArgs e)
        {
            sair();
        }

        public void sair()
        {
            menuAnalist.sair();
        }

        private void lcategorias_KeyDown(object sender, KeyEventArgs e)
        {
            if (lcategorias.Text.ToString().Length == 50)
            {
                e.SuppressKeyPress = true;
            }
            
            if (e.KeyCode == Keys.Enter)
            {
                seguinte_Click(this, null);
            }

        }


    }
}
